package nbcp.web.product

import io.swagger.annotations.Api
import io.swagger.annotations.ApiOperation
import nbcp.base.comm.*
import org.springframework.web.bind.annotation.RestController
import nbcp.comm.JsonpMapping
import nbcp.db.KeyValueString
import nbcp.db.mongo.*

/**
 * Created by Cy on 17-4-1.
 */

@Api(description = "商品信息", tags = arrayOf("ProductInfo"))
@RestController
@JsonpMapping("/info/product")
class ProductInfo_Parameter_Controller {

    //  xx/productInfo/listSku
    @ApiOperation("(编辑时)获取parameters属性")
    @JsonpMapping("/listParameters")
    fun listParameters(productId: String): ListResult<KeyValueString> {
        var ret = ListResult<KeyValueString>();

        //根据productId查询出对应的商品
        val productInfo = mor.info.productInfo.queryById(productId)
                .select(mor.info.productInfo.parameters.toString())
                .toEntity();

        if (productInfo == null) {
            //logger.error("商品ID为" + productId + "的没有获取到sku")
            ret.msg = "找不到商品信息";
            return ret;
        }
        //获取到sku
        //放入到ListResult中
        ret.data = productInfo.parameters
        //将sku属性的条数设置到返回参数中去
        ret.total = ret.data.size

        return ret;
    }


    //  xx/productInfo/parameters
    @ApiOperation("添加parameter")
    @JsonpMapping("/addParameter")
    fun addParameter(productId: String, parameterKey: String, parameterValue: String): JsonResult {

        //更新modify表parameters
        mor.info.productInfo
                .updateById(productId)
                .push { it.parameters to KeyValueString(parameterKey, parameterValue) }
                .exec()

        if (mor.affectRowCount == 0) {
            return JsonResult("添加parameters属性失败")
        }

        //返回执行查询sku列表数据
        return JsonResult();
    }

    //  xx/productInfo/saveSku
    @ApiOperation("修改parameter")
    @JsonpMapping("/saveParameter")
    fun saveParameter(productId: String, index: Int, parameterKey: String, parameterValue: String): JsonResult {

        //对传入的skuValue进行分割
        // var skuV = parametersValue.split(",")
        mor.info.productInfo
                .updateById(productId)
                .set(mor.info.productInfo.parameters.toString() + "." + index.toString(), KeyValueString(parameterKey, parameterValue))
                .exec()

        if (mor.affectRowCount == 0) {
            return JsonResult("修改parameters失败")
        }

        return JsonResult();
    }


    //  xx/productInfo/delSku
    @ApiOperation("删除parameter")
    @JsonpMapping("/delParameter")
    fun delParameter(productId: String, index: Int): JsonResult {

        if (index < 0) return JsonResult("参数非法")

        var productInfo = mor.info.productInfo.queryById(productId).toEntity();
        if (productInfo == null) {
            return JsonResult("找不到商品信息")
        }

        if (index < productInfo.parameters.size) {
            productInfo.parameters.removeAt(index);
        }

        mor.info.productInfo
                .updateById(productId)
                .set(mor.info.productInfo.parameters.toString(), productInfo.parameters)
                .exec()

        if (mor.affectRowCount == 0) {
            return JsonResult("删除参数失败")
        }

        return JsonResult()
    }
}